Hauptseite Zu yanwittmann.de

Zur Hauptseite

    5. Felder / Arrays    

Bitte Warnung ganz unten lesen!

Software >> Java & OOP


Die bisher behandelten Variablen und Konstanten sind sogenannte einfache Datentypen. Eine weitere Datenstruktur ist das Array oder auch Feld genannt.

Was ist ein Feld? Ein Feld kann eine gewisse Anzahl an Werten, die alle vom gleichen Typ sind, enthalten. In diesem Beispiel handelt es sich um ein Integer Feld mit der Größe 6. Jeder der 6 Feldplätze kann somit einem Integer-Wert zugeordnet werden.


Man kann die Größe eines Feldes nur ein einziges mal festlegen, danach ist diese unveränderlich gesetzt. Darum sollte man sich vor der initialisierung Gedanken darüber machen, wie viele Werte man in dem Feld speichern können möchte.

Um ein Array zu deklarieren muss man einfach den Typ, von dem das Feld sein soll, und ein [] eckiges Klammerpaar dahinter setzen. Um es zu initialisieren muss man das Schlüsselwort new verwenden, denn ein Feld ist kein primitiver Typ mehr. Bei der Initialisierung muss man zudem die Feldgröße in den [] eckigen Klammern angeben.
Eine alternative Initialisierungsmethode ist, gleich Werte für die Feldplätze anzugeben. Die Feldgröße wird dann auf die Anzahl der angegebenen Werte gesetzt.

int[] meinFeld;     
meinFeld = new int[6];     
int[] anderesFeld = {12, 54, 78, 2, 34, 5};     
Java

In beiden Fällen wäre die Feldgröße 6, nur, dass anderesFeld bereits Werte auf den Feldplätzen hat.

Nun kann man sowohl lesend als auch schreibend auf die Feldelemente zugreifen. Dazu braucht es den Feldnamen mit [] eckigen Klammern mit dem Index in diesen. Wichtig ist hierbei zu wissen, dass der erste Feldplatz den Index 0 und nicht 1 hat, man beginnt also bei 0 zu zählen.

int[] meinFeld = new int[6];     
meinFeld[0] = 3;
meinFeld[1] = 57;
meinFeld[2] = 31;
meinFeld[3] = 98;
meinFeld[4] = -4;
meinFeld[5] = 12;
System.out.println(meinFeld[1]);     
Java

Dies würde 57 ausgeben, da wir den Feldplatz mit dem Index 1 auf 57 gesetzt haben: meinFeld[1] = 57;


Kein primitiver Datentyp

Doch was bedeutet es, dass ein Feld kein primitiver Datentyp mehr ist?
Ein primitiver Datentyp besteht einfach nur aus einem konkreten Wert, also z.B. bei einem integer eine 78 oder bei einem character ein 'y'. Das heißt, an seiner Adresse steht nur dieser Wert und nichts weiter.
Bei allen anderen Datentypen, wie Objekte von Klassen oder eben wie hier Felder, ist dies anders: An deren Adresse im Speicher steht nicht einfach nur ein Wert, es befindet sich eine Referenz zu einem Wert dort (also eine weitere Adresse im Speicher). Wenn man dieser Referenz folgt (also zu der angegebenen Adresse geht), stößt man dann entweder auf einen primitiven Datentyp oder weitere Referenzen.


Im Bild oben ist folgendes zu sehen:
Die Variable x vom Typ int hat bei seiner Adresse im Speicher direkt eine 45 eingetragen, da es sich bei dem integer um einen primitiven Datentyp handelt.
Als nächstes kommt ein int[] integer Feld meinFeld. Dieses hat erst mal keinen konkreten Wert im Speicher, sondern eine Referenz: 64783. Bei der Adresse 64783 sind also die konkreten Werte des Feldes angegeben, dazu müssen wir einfach der Referenz, also dem Pfeil, folgen und landen bei: 23, 54364. meinFeld ist also ein Feld das zwei Stellen groß ist mit den Werten 23 und 54364.
Doch was ist das? Weiter unten gibt es noch ein weiteres Feld zweitesFeld, das auch auf die Adresse 64783 zeigt! Das ist der Unterschied zu primitiven Datentypen: Es kann mehrere Variablen mit der gleichen Referenz geben. Wenn wir also einen Wert in zweitesFeld verändern, so verändern wir diesen auch in meinFeld gleichermaßen, da beide Felder auf die gleiche Adresse im Speicher zeigen und damit auch auf das gleiche reale Feld zugreifen.
Hier wäre die initialisierung dieser beiden Felder im Code:

int[] meinFeld = {23, 54364};     
int[] zweitesFeld = meinFeld;
meinFeld[1] = 984;    //Aufgabe 1 weiter unten! ;-)     
System.out.println(zweitesFeld[1]);
Java

Mit zweitesFeld = meinFeld wird nicht das Feld meinFeld kopiert, sondern die Referenz zum eigentlichen Feld kopiert. Damit greifen also beide Variablen auf das gleiche Feld zu.

Für die Variable wahrheitstabelle ist es das gleiche, ein boolean[] Feld, das auf die eigentlichen Werte mit einer Referenz verweist.


Mehrdimensionale Felder / Arrays

Bisher sahen unsere Felder so aus:

Doch Felder können nicht nur eine Dimension, sondern beliebig viele Dimensionen enthalten! (okay, eigentlich nur 255)
Man kann also Felder auch so aussehen lassen:

Dieses Feld hätte 2 Dimensionen. Pro Dimension kommt ein [] eckiges Klammerpaar dazu.


Aufgaben

    Frage 1
Was würde in dem Beispiel mit meinFeld und zweitesFeld ausgegeben werden?

    Frage 2
Erstelle ein integer Feld mit der Größe 5 und platziere auf dem letzten Feldplatz eine 8.

    Frage 3
Was ist der Unterschied zwischen einem primitiven Datentyp und den anderen Typen?

    Frage 4
Warum hat in dem großen Bild oben auch ein String eine Referenz, die dann auf eine weitere Referenz zeigt?

    Frage 5
Initialisiere ein 2-dimensionales double Feld (5x9) bei dem jeder Feldwert 9.3 ist. Verwende for-Schleifen.



Warnung:

Diese Seite entspricht noch nicht den Ansprüchen, die wir für diese Website haben.
Grund: Mehrdimensionale Arrays werden noch nicht so gut erklärt.
Falls du eine Idee hast, wie man dieses Problem beheben könnte, kontaktiere uns bitte über den Link Hilf mit! in der grauen Footer-Leiste unten.